home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / misc / poolfx92.lzh / POOLFIX3.S next >
Text File  |  1992-03-04  |  9KB  |  614 lines

  1. ;File name:    POOLFIX3.S        Revision date:    1992.03.03
  2. ;Revised by:    Ulf Ronald Andersson    Disassembled:    1992.03.03
  3. ;
  4. ;
  5.     include    TOS\URAn_SYS.S
  6.     include    TOS\URAn_DOS.S
  7.     include    TOS\URAn_XB.S
  8. ;
  9. ;
  10.     text
  11. ;
  12. ;
  13. L0:
  14.     move.l    4(sp),a6
  15.     move.l    a6,basepage_p
  16.     clr.l    -(sp)
  17.     move    #$20,-(sp)
  18.     trap    #1
  19. ;NB: ERROR of POOLFIX3, returned SSP is ignored here
  20. ;NB: This may not work in all TOS versions
  21.     gemdos    Sversion
  22.     lea    not_needed_s(pc),a0
  23.     cmp    #$1500,d0
  24.     bne    error_exit
  25.     lea    strange_TOS_s(pc),a0
  26.     move.l    (_sysbase).w,a1
  27.     move    2(a1),d0
  28.     cmp    #$104,d0        ;TOS 1.04 ?
  29.     beq.b    L40
  30.     cmp    #$106,d0        ;TOS 1.06 ?
  31.     bne    error_exit
  32. L40:
  33.     clr.l    -(sp)
  34.     move.l    #'_OOL',-(sp)
  35.     bsr    find_cookie        ;test for own 'cookie'
  36.     addq.l    #4,sp
  37.     lea    already_in_s(pc),a0
  38.     tst    d0
  39.     bne    error_exit
  40.     lea    bad_linkage_s(pc),a0
  41.     move.l    (_sysbase).w,a1
  42.     move.l    8(a1),a1
  43.     move.l    (ev_gemdos).w,a2
  44.     move.l    a2,d0
  45.     sub.l    a1,d0
  46.     cmp.l    #$20000,d0
  47.     bhi    error_exit
  48.     lea    strange_TOS_s(pc),a0
  49.     cmpi    #$2EBC,-1796(a2)
  50.     bne    error_exit
  51.     cmpi    #$2A79,-1102(a2)
  52.     bne    error_exit
  53.     clr.l    -(sp)
  54.     move.l    sp,a5
  55.     move.l    a5,-(sp)
  56.     clr.l    -(sp)
  57.     bsr    find_cookie        ;test for free 'cookie'
  58.     addq.l    #4,sp
  59.     addi.l    #$8,(a5)
  60.     move.l    (a5),-(sp)
  61.     move.l    24(a6),d0
  62.     add.l    28(a6),d0
  63.     move.l    d0,-(sp)
  64.     move.l    #$0,-(sp)
  65.     move.l    #'_OOL',-(sp)
  66.     bsr    place_cookie
  67.     adda    #$10,sp
  68.     moveq    #0,d7
  69.     tst    d0
  70.     bmi.b    LCE
  71.     beq.b    LCE
  72.     move.l    (a5),d7
  73.     asl.l    #3,d7
  74. LCE:
  75.     move.l    (ev_gemdos).w,a1
  76.     move.l    -1794(a1),a2
  77.     move.l    a2,L78E
  78.     move.l    a2,L786
  79.     addq.l    #4,a2
  80.     move.l    a2,L78A
  81.     move.l    -1100(a1),a2
  82.     move.l    a2,L792
  83.     move.l    (ev_gemdos).w,8+nu_gemdos
  84.     move.l    #12+nu_gemdos,$84.w
  85.     gemdos    Cconws,installed_s
  86.     move.l    24(a6),d0
  87.     add.l    28(a6),d0
  88.     add.l    d7,d0
  89.     sub.l    a6,d0
  90.     gemdos    Ptermres,d0,#0
  91. ;
  92. ;
  93. error_exit:
  94.     move.l    a0,-(sp)
  95.     move    #$9,-(sp)
  96.     trap    #1
  97.     addq    #6,sp
  98.     move.l    #L172,-(sp)
  99.     move    #$9,-(sp)
  100.     trap    #1
  101.     addq    #6,sp
  102.     move    #$1,-(sp)
  103.     move    #$4C,-(sp)
  104.     trap    #1
  105.     dc.b    'J',$FC    ;    dc.w    $4AFC
  106. ;
  107. ;
  108. installed_s:
  109.     dc.b    'POOL PATCH OF 19-JAN-90 INSTALLED.',CR,LF,NUL
  110. already_in_s:
  111.     dc.b    'The pool patch is already installed.',NUL
  112. not_needed_s:
  113.     dc.b    'The pool patch is not needed in this TOS',NUL
  114. bad_linkage_s:
  115.     dc.b    'The pool patch must run first in the',CR,LF
  116.     dc.b    '\AUTO\ folder (before any program',CR,LF
  117.     dc.b    'links into the GEMDOS (trap 1) vector).',NUL
  118. strange_TOS_s:
  119.     dc.b    'This GEMDOS needs the pool patch, but',CR,LF
  120.     dc.b    "this program doesn't recognize this TOS.",NUL
  121. ;
  122. ;
  123. basepage_p:    dc.l    0    ;unref
  124. ;
  125. ;
  126.     XB_define    nu_gemdos,'_OOL'
  127.     tst.b    poolfix_flag
  128.     beq    L2A2
  129.     bsr    compact_all_sub
  130. L2A2:
  131.     move    USP,a0
  132.     btst    #5,(sp)
  133.     beq.b    L2B6
  134.     lea    6(sp),a0
  135.     tst    (_longframe).w
  136.     beq.b    L2B6
  137.     addq.l    #2,a0
  138. L2B6:
  139.     move    (a0),d0    ;Pterm0 ?
  140.     beq.b    L2CA
  141.     cmp    #$49,d0    ;Mfree ?
  142.     beq.b    L2CA
  143.     cmp    #$31,d0    ;Ptermres ?
  144.     beq.b    L2CA
  145.     cmp    #$4C,d0    ;Pterm ?
  146. NB: Error of POOLFIX3: Mshrink is ignored !!!
  147. NB: Yet, it too can free RAM for compaction
  148. L2CA:
  149.     seq    poolfix_flag
  150.     move.l    8+nu_gemdos,a0
  151.     jmp    (a0)
  152. ;
  153. ;
  154. compact_all_sub:
  155.     link    a6,#0
  156.     movem.l    d2-d7/a3-a5,-(sp)
  157.     suba.l    a5,a5
  158.     move.l    L792,a0
  159.     move.l    (a0),a4
  160.     clr    d3
  161.     bra    L34A
  162. ;
  163. L2F0:
  164.     tst.b    4(a4)
  165.     ble    L348
  166.     clr    d4
  167.     clr    d5
  168.     lea    6(a4),a3
  169.     bra    L328
  170. ;
  171. L304:
  172.     cmpi.l    #$1,12(a3)
  173.     bne    L31E
  174.     add    #$1,d4
  175.     move.l    a5,d0
  176.     bne    L31E
  177.     move.l    a4,a5
  178.     move    d5,d6
  179. L31E:
  180.     add    #$1,d5
  181.     adda.l    #$10,a3
  182. L328:
  183.     cmp    #$4,d5
  184.     blt.b    L304
  185.     cmp    #$4,d4
  186.     bne    L346
  187.     clr.b    4(a4)
  188.     cmp.l    a4,a5
  189.     bne    L342
  190.     suba.l    a5,a5
  191. L342:
  192.     bra    L348
  193. ;
  194. L346:
  195.     add    d4,d3
  196. L348:
  197.     move.l    (a4),a4
  198. L34A:
  199.     move.l    a4,d0
  200.     bne.b    L2F0
  201.     cmp    #$4,d3
  202.     blt    L566
  203.     move.l    a5,a4
  204.     move    d6,d7
  205. L35A:
  206.     add    #$1,d7
  207.     cmp    #$4,d7
  208.     beq    L36E
  209.     tst.b    4(a4)
  210.     bgt    L372
  211. L36E:
  212.     clr    d7
  213.     move.l    (a4),a4
  214. L372:
  215.     move.l    a4,d0
  216.     beq    L392
  217.     tst.b    4(a4)
  218.     ble.b    L35A
  219.     move    d7,d0
  220.     ext.l    d0
  221.     asl.l    #4,d0
  222.     add.l    a4,d0
  223.     move.l    d0,a0
  224.     cmpi.l    #$1,18(a0)
  225.     beq.b    L35A
  226. L392:
  227.     bra    L55A
  228. ;
  229. L396:
  230.     bra    L41C
  231. ;
  232. L39A:
  233.     lea    6(a5),a3
  234.     cmpi.l    #$1,12(a3)
  235.     bne    L418
  236.     cmpi.l    #$1,28(a3)
  237.     bne    L418
  238.     cmpi.l    #$1,44(a3)
  239.     bne    L418
  240.     cmpi.l    #$1,60(a3)
  241.     bne    L418
  242.     clr.b    4(a5)
  243.     move    #$3,d6
  244. L3D6:
  245.     add    #$1,d6
  246.     cmp    #$4,d6
  247.     beq    L3EA
  248.     tst.b    4(a5)
  249.     bgt    L3EE
  250. L3EA:
  251.     clr    d6
  252.     move.l    (a5),a5
  253. L3EE:
  254.     move.l    a5,d0
  255.     beq    L40E
  256.     tst.b    4(a5)
  257.     ble.b    L3D6
  258.     move    d6,d0
  259.     ext.l    d0
  260.     asl.l    #4,d0
  261.     add.l    a5,d0
  262.     move.l    d0,a0
  263.     cmpi.l    #$1,18(a0)
  264.     bne.b    L3D6
  265. L40E:
  266.     move.l    a5,d0
  267.     beq    L566
  268.     bra    L41C
  269. ;
  270. L418:
  271.     bra    L422
  272. ;
  273. L41C:
  274.     tst    d6
  275.     beq    L39A
  276. L422:
  277.     bra    L4A4
  278. ;
  279. L426:
  280.     lea    6(a4),a3
  281.     cmpi.l    #$1,12(a3)
  282.     beq    L4A0
  283.     cmpi.l    #$1,28(a3)
  284.     beq    L4A0
  285.     cmpi.l    #$1,44(a3)
  286.     beq    L4A0
  287.     cmpi.l    #$1,60(a3)
  288.     beq    L4A0
  289.     move    #$3,d7
  290. L45E:
  291.     add    #$1,d7
  292.     cmp    #$4,d7
  293.     beq    L472
  294.     tst.b    4(a4)
  295.     bgt    L476
  296. L472:
  297.     clr    d7
  298.     move.l    (a4),a4
  299. L476:
  300.     move.l    a4,d0
  301.     beq    L496
  302.     tst.b    4(a4)
  303.     ble.b    L45E
  304.     move    d7,d0
  305.     ext.l    d0
  306.     asl.l    #4,d0
  307.     add.l    a4,d0
  308.     move.l    d0,a0
  309.     cmpi.l    #$1,18(a0)
  310.     beq.b    L45E
  311. L496:
  312.     move.l    a4,d0
  313.     beq    L566
  314.     bra    L4A4
  315. ;
  316. L4A0:
  317.     bra    L4AA
  318. ;
  319. L4A4:
  320.     tst    d7
  321.     beq    L426
  322. L4AA:
  323.     cmp.l    a5,a4
  324.     beq    L522
  325.     move    d6,d0
  326.     ext.l    d0
  327.     asl.l    #4,d0
  328.     add.l    a5,d0
  329.     move.l    d0,(sp)
  330.     addi.l    #$6,(sp)
  331.     move    d7,d0
  332.     ext.l    d0
  333.     asl.l    #4,d0
  334.     add.l    a4,d0
  335.     move.l    d0,-(sp)
  336.     addi.l    #$6,(sp)
  337.     jsr    compact_block_sub
  338.     addq.l    #4,sp
  339.     move    d7,d0
  340.     ext.l    d0
  341.     asl.l    #4,d0
  342.     add.l    a4,d0
  343.     move.l    d0,a0
  344.     move.l    #$1,18(a0)
  345. L4EA:
  346.     add    #$1,d6
  347.     cmp    #$4,d6
  348.     beq    L4FE
  349.     tst.b    4(a5)
  350.     bgt    L502
  351. L4FE:
  352.     clr    d6
  353.     move.l    (a5),a5
  354. L502:
  355.     move.l    a5,d0
  356.     beq    L522
  357.     tst.b    4(a5)
  358.     ble.b    L4EA
  359.     move    d6,d0
  360.     ext.l    d0
  361.     asl.l    #4,d0
  362.     add.l    a5,d0
  363.     move.l    d0,a0
  364.     cmpi.l    #$1,18(a0)
  365.     bne.b    L4EA
  366. L522:
  367.     add    #$1,d7
  368.     cmp    #$4,d7
  369.     beq    L536
  370.     tst.b    4(a4)
  371.     bgt    L53A
  372. L536:
  373.     clr    d7
  374.     move.l    (a4),a4
  375. L53A:
  376.     move.l    a4,d0
  377.     beq    L55A
  378.     tst.b    4(a4)
  379.     ble.b    L522
  380.     move    d7,d0
  381.     ext.l    d0
  382.     asl.l    #4,d0
  383.     add.l    a4,d0
  384.     move.l    d0,a0
  385.     cmpi.l    #$1,18(a0)
  386.     beq.b    L522
  387. L55A:
  388.     move.l    a5,d0
  389.     beq    L566
  390.     move.l    a4,d0
  391.     bne    L396
  392. L566:
  393.     tst.l    (sp)+
  394.     movem.l    (sp)+,d3-d7/a3-a5
  395.     unlk    a6
  396.     rts
  397. ;
  398. ;
  399. ;NB: fatal POOLFIX3 error in this subroutine  !!!
  400. ;NB: It may be called for ANY gemdos function following a RAM release
  401. ;NB: so at final gemdos exit all regs except d0/a0 must be restored
  402. ;NB: but d1 is used here, without protection either here or above
  403. ;NB: ONLY the 'Super' function has permission to do this !!!
  404. ;NB: This may BOMB any program expecting unchanged d1    !!!
  405. compact_block_sub:
  406.     link    a6,#-4
  407.     movem.l    d6-d7/a3-a5,-(sp)
  408.     move.l    8(a6),a5
  409.     clr    d7
  410.     bra    L5AE
  411. ;
  412. L582:
  413.     move    d7,a0
  414.     adda.l    a0,a0
  415.     adda.l    a0,a0
  416.     adda.l    #L786,a0
  417.     move.l    (a0),-4(a6)
  418.     move.l    -4(a6),a3
  419.     move.l    (a3),a4
  420.     bra    L5A6
  421. ;
  422. L59C:
  423.     cmp.l    a5,a4
  424.     beq    L5BC
  425.     move.l    a4,a3
  426.     move.l    (a3),a4
  427. L5A6:
  428.     move.l    a4,d0
  429.     bne.b    L59C
  430.     add    #$1,d7
  431. L5AE:
  432.     cmp    #$2,d7
  433.     blt.b    L582
  434.     move    #$1,d0
  435.     bra    L5F0
  436. ;
  437. L5BC:
  438.     move.l    L78E,a0
  439.     cmp.l    8(a0),a5
  440.     bne    L5D6
  441.     move.l    L78E,a0
  442.     move.l    12(a6),8(a0)
  443. L5D6:
  444.     move.l    12(a6),a0
  445.     move.l    a5,a1
  446.     move    #$7,d1        ;NB: ERROR d1 unprotected
  447. L5E0:
  448.     move    (a1)+,(a0)+
  449.     dbf    d1,L5E0        ;NB: ERROR d1 unprotected
  450.     move.l    12(a6),(a3)
  451.     clr    d0
  452.     bra    L5F0
  453. ;
  454. L5F0:
  455.     tst.l    (sp)+
  456.     movem.l    (sp)+,d7-d7/a3-a5
  457.     unlk    a6
  458.     rts
  459. ;
  460. ;
  461. ;int    find_cookie(long id, void **ptr)
  462. find_cookie:
  463.     movem.l    d6-d7/a6-a6,-(sp)
  464.     move.l    16(sp),d6
  465.     move.l    20(sp),a6
  466.     clr.l    d7
  467.     move.l    #$1,-(sp)
  468.     move    #$20,-(sp)
  469.     trap    #1
  470.     tst.l    d0
  471.     bne    L62A
  472.     move.l    #$0,2(sp)
  473.     move    #$20,(sp)
  474.     trap    #1
  475.     move.l    d0,d7
  476. L62A:
  477.     addq.l    #6,sp
  478.     move.l    (_cookies).w,a0
  479.     move.l    a0,d0
  480.     beq    L654
  481. L636:
  482.     move.l    (a0),d0
  483.     cmp.l    d0,d6
  484.     beq    L648
  485.     tst.l    d0
  486.     beq    L654
  487.     addq.l    #8,a0
  488.     bra.b    L636
  489. ;
  490. L648:
  491.     move.l    a6,d0
  492.     beq    L652
  493.     move.l    4(a0),(a6)
  494. L652:
  495.     moveq    #1,d0
  496. L654:
  497.     move.l    d0,d6
  498.     tst.l    d7
  499.     beq    L666
  500.     move.l    d7,-(sp)
  501.     move    #$20,-(sp)
  502.     trap    #1
  503.     addq.l    #6,sp
  504. L666:
  505.     move.l    d6,d0
  506.     movem.l    (sp)+,d6-d7/a6-a6
  507.     rts
  508. ;
  509. ;
  510. place_cookie:
  511.     link    a6,#0
  512.     move.l    d7,-(sp)
  513.     moveq    #0,d7
  514.     move.l    #$1,-(sp)
  515.     move    #$20,-(sp)
  516.     trap    #1
  517.     tst.l    d0
  518.     bne    L698
  519.     move.l    #$0,2(sp)
  520.     move    #$20,(sp)
  521.     trap    #1
  522.     move.l    d0,d7
  523. L698:
  524.     addq.l    #6,sp
  525.     move.l    (_cookies).w,a0
  526.     move.l    a0,d0
  527.     beq    L6D4
  528.     moveq    #0,d0
  529. L6A6:
  530.     addq.l    #1,d0
  531.     tst.l    (a0)
  532.     beq    L6B2
  533.     addq.l    #8,a0
  534.     bra.b    L6A6
  535. ;
  536. L6B2:
  537.     cmp.l    4(a0),d0
  538.     beq    L732